const express = require("express");
const app = express();
const cors = require("cors");
function corsMiddleWare(req, res, next) {
  // 允许 127.0.0.1:5500 这个源发起跨域请求
  //   res.setHeader("Access-Control-Allow-Origin", "http://127.0.0.1:5500");

  // 允许所有源发起跨域请求
  res.setHeader("Access-Control-Allow-Origin", "*");
  next();
}
const { createProxyMiddleware } = require("http-proxy-middleware");
// 处理预检请求 复杂请求会触发 options
// app.options("/", (req, res) => {
//   // 设置允许的跨域请求源
//   res.setHeader("Access-Control-Allow-Origin", "http://127.0.0.1:5500");
//   // 设置允许的请求方法
//   res.setHeader("Access-Control-Allow-Methods", "GET");
//   // 设置允许的请求头
//   res.setHeader("Access-Control-Allow-Headers", "food");
//   // 设置预检请求的缓存时间（可选）
//   res.setHeader("Access-Control-Max-Age", 7200);
//   // 发送响应
//   res.send();
// });

// // 设置 cors 配置项
// const corsOptions = {
//   origin: "http://127.0.0.1:5500", // 允许的源
//   methods: ["GET", "POST", "PUT", "DELETE", "HEAD", "OPTIONS"], // 允许的方法
//   allowedHeaders: ["food"], // 允许的自定义头
//   exposedHeaders: ["abc"], // 要暴露的响应头
//   optionsSuccessStatus: 200, // 预检请求成功的状态码
// };

// app.use(cors()); //默认所有都允许

// app.use(cors(corsOptions)); // 使用cors中间件

// 启动静态资源 让服务器跟页面同一个源
app.use(express.static("./public"));

// 使用代理服务器
app.use(
  "/api",
  createProxyMiddleware({
    target: "https://www.toutiao.com",
    changeOrigin: true,
    pathRewrite: {
      "^/api": "",
    },
  })
);
// 简单请求 设置允许源
app.get("/", corsMiddleWare, (req, res) => {
  // 随便设置一个自定义响应头 (默认js代码是访问不到设置的响应头的)
  res.setHeader("abc", 123);
  res.send({
    msg: "hello!",
  });
});

// jsonp 解决跨域
const data = [{ name: "zs", age: 18 }];
app.get("/jsonp", (req, res) => {
  // callback为传递的方法名
  const { callback } = req.query;
  // data 必须转为json （并且使用模版字符串否则会认为是前端变量）
  res.send(`${callback}(${JSON.stringify(data)})`);
});

// 复杂请求会发送预检请求 需要单独设置 或者借助 cors
app.delete("/delete", corsMiddleWare, (req, res) => {
  res.send({
    msg: "hello!",
  });
});
app.listen(8081, (req, res) => {
  console.log("启动成功");
});
